package model;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author Alvin & Roy
 */
public class Speler extends SpelObject {
    /**
     * De constructor
     * @param v Het veld waar de speler op staat
     */
    public Speler(Veld v){
        //roep de constructor van Spel Object aan
        super(v);
        //haal het plaatje van de speler op
        try {
            setImg(ImageIO.read(new File(getIPATH()+"squirrel.gif")));
        }catch (IOException e) {
             System.out.println("Fout bij het laden van de recources: " + e);
             System.exit(0);
        }
    }

    /**
     * Haal de positie van de speler op
     * @return De positie van de speler
     */
    public Positie getPositie(){
        return this.getVeld().getPositie();
    }

    /**
     * Beweeg de speler
     * @param r De richting om in te bewegen
     */
    public void move(Richting r){
        //Haal de buur waarheen de speler wil bewegen op
        Veld buur = this.getVeld().getBuur(r);
        //als de buur bestaat & de buur is leeg
        if(buur != null && buur.getSpelObject() == null){
            //Verwijder de speler van het huidige veld
            this.getVeld().setSpelObject(null);
            //Zet de speler op het buurveld
            buur.setSpelObject(this);
            //Voeg de buur toe aan de speler
            this.setVeld(buur);
            this.paint();
         //als de buur bestaat & er staat een obstakel op
         }else if(buur != null && buur.getSpelObject() instanceof Obstakel){
                //haal het obstakel op
                Obstakel o = (Obstakel)buur.getSpelObject();
                //als het beweeegbaar is
                if(o.isMovable()){
                    //Als het obstakel bewogen is
                    if(o.move(r)){
                        //Verwijder de speler van het huidige veld
                        this.getVeld().setSpelObject(null);
                        //Zet de speler op het buurveld
                        buur.setSpelObject(this);
                        //Voeg de buur toe aan de speler
                        this.setVeld(buur);
                        this.paint();
                    }
                }
         }else if(buur != null && buur.getSpelObject() instanceof Noot){
             //haal de noot op
                Noot n = (Noot)buur.getSpelObject();
                n.move(r);
               
         }
    }

    /**
     * paint roept de teken functie van GameMap aan
     */
    public void paint(){
        GameMap.teken();
    }
}
